{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "27e86681",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import LSTM\n",
    "from tensorflow.keras.layers import Dense, Dropout\n",
    "import pandas as pd\n",
    "from matplotlib import pyplot as plt\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "59a416cd",
   "metadata": {},
   "outputs": [],
   "source": [
    "df=pd.read_csv(\"train.csv\",parse_dates=[\"Date\"],index_col=[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "ab54faea",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "None\n"
     ]
    }
   ],
   "source": [
    "print(df.index.freq)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "9d69a828",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5203, 5)"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "id": "1fe6f18e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2001-01-25</th>\n",
       "      <td>356.730774</td>\n",
       "      <td>362.980774</td>\n",
       "      <td>352.403839</td>\n",
       "      <td>353.365387</td>\n",
       "      <td>197.122452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001-01-26</th>\n",
       "      <td>357.211548</td>\n",
       "      <td>360.096161</td>\n",
       "      <td>342.788452</td>\n",
       "      <td>343.269226</td>\n",
       "      <td>191.490234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001-01-29</th>\n",
       "      <td>345.153839</td>\n",
       "      <td>355.769226</td>\n",
       "      <td>338.461548</td>\n",
       "      <td>341.384613</td>\n",
       "      <td>190.439011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001-01-30</th>\n",
       "      <td>344.307678</td>\n",
       "      <td>355.923065</td>\n",
       "      <td>341.692322</td>\n",
       "      <td>355.769226</td>\n",
       "      <td>198.463318</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001-01-31</th>\n",
       "      <td>359.615387</td>\n",
       "      <td>361.153839</td>\n",
       "      <td>350.461548</td>\n",
       "      <td>353.692322</td>\n",
       "      <td>197.304749</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close\n",
       "Date                                                                  \n",
       "2001-01-25  356.730774  362.980774  352.403839  353.365387  197.122452\n",
       "2001-01-26  357.211548  360.096161  342.788452  343.269226  191.490234\n",
       "2001-01-29  345.153839  355.769226  338.461548  341.384613  190.439011\n",
       "2001-01-30  344.307678  355.923065  341.692322  355.769226  198.463318\n",
       "2001-01-31  359.615387  361.153839  350.461548  353.692322  197.304749"
      ]
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "750dae9a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-09-23</th>\n",
       "      <td>99.529999</td>\n",
       "      <td>104.080002</td>\n",
       "      <td>99.519997</td>\n",
       "      <td>102.959999</td>\n",
       "      <td>102.789993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-24</th>\n",
       "      <td>102.660004</td>\n",
       "      <td>104.199997</td>\n",
       "      <td>102.599998</td>\n",
       "      <td>103.800003</td>\n",
       "      <td>103.709198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-27</th>\n",
       "      <td>104.550003</td>\n",
       "      <td>106.330002</td>\n",
       "      <td>104.389999</td>\n",
       "      <td>105.349998</td>\n",
       "      <td>105.257835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-28</th>\n",
       "      <td>105.290001</td>\n",
       "      <td>106.750000</td>\n",
       "      <td>104.730003</td>\n",
       "      <td>105.730003</td>\n",
       "      <td>105.637512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-29</th>\n",
       "      <td>106.000000</td>\n",
       "      <td>107.000000</td>\n",
       "      <td>105.309998</td>\n",
       "      <td>106.279999</td>\n",
       "      <td>106.187027</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close\n",
       "Date                                                                  \n",
       "2021-09-23   99.529999  104.080002   99.519997  102.959999  102.789993\n",
       "2021-09-24  102.660004  104.199997  102.599998  103.800003  103.709198\n",
       "2021-09-27  104.550003  106.330002  104.389999  105.349998  105.257835\n",
       "2021-09-28  105.290001  106.750000  104.730003  105.730003  105.637512\n",
       "2021-09-29  106.000000  107.000000  105.309998  106.279999  106.187027"
      ]
     },
     "execution_count": 172,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "9f685196",
   "metadata": {},
   "outputs": [],
   "source": [
    "test_split=round(len(df)*0.20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "id": "c435d2e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1041"
      ]
     },
     "execution_count": 174,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "id": "6815e6cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_for_training=df[:-test_split]\n",
    "df_for_testing=df[-test_split:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "id": "164f3e06",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(4162, 5)\n",
      "(1041, 5)\n"
     ]
    }
   ],
   "source": [
    "print(df_for_training.shape)\n",
    "print(df_for_testing.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "id": "4a86012c",
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler = MinMaxScaler(feature_range=(0,1))\n",
    "df_for_training_scaled = scaler.fit_transform(df_for_training)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "id": "5697bff5",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_for_testing_scaled=scaler.transform(df_for_testing)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "id": "d33a6b6e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.85398707, 0.86281807, 0.85292546, 0.8403402 , 0.82180889],\n",
       "       [0.85533406, 0.85473269, 0.82623316, 0.8122593 , 0.79289309],\n",
       "       [0.82155169, 0.84260459, 0.81422168, 0.80701755, 0.78749611],\n",
       "       ...,\n",
       "       [0.40689652, 0.40362224, 0.41960282, 0.40436458, 0.7632948 ],\n",
       "       [0.40517242, 0.39995691, 0.41832161, 0.4075738 , 0.76889077],\n",
       "       [0.40862067, 0.39974127, 0.41426436, 0.39880189, 0.75359571]])"
      ]
     },
     "execution_count": 179,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_for_training_scaled"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "id": "03b668b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4162, 5)"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_for_training_scaled.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "id": "88390259",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1041, 5)"
      ]
     },
     "execution_count": 181,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_for_testing_scaled.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "id": "b6a58026",
   "metadata": {},
   "outputs": [],
   "source": [
    "def createXY(dataset,n_past):\n",
    "    dataX = []\n",
    "    dataY = []\n",
    "    for i in range(n_past, len(dataset)):\n",
    "            dataX.append(dataset[i - n_past:i, 0:dataset.shape[1]])\n",
    "            dataY.append(dataset[i,0])\n",
    "    return np.array(dataX),np.array(dataY)        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "18b62d65",
   "metadata": {},
   "outputs": [],
   "source": [
    "trainX,trainY=createXY(df_for_training_scaled,30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "id": "8d694c12",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4132, 30, 5)"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainX.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2795bf2a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "id": "184bfdb6",
   "metadata": {},
   "outputs": [],
   "source": [
    "testX,testY=createXY(df_for_testing_scaled,30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "id": "5e77d396",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.85398707, 0.86281807, 0.85292546, 0.8403402 , 0.82180889],\n",
       "       [0.85533406, 0.85473269, 0.82623316, 0.8122593 , 0.79289309],\n",
       "       [0.82155169, 0.84260459, 0.81422168, 0.80701755, 0.78749611],\n",
       "       [0.81918098, 0.84303579, 0.82319031, 0.8470261 , 0.8286929 ],\n",
       "       [0.86206895, 0.85769729, 0.84753366, 0.84124952, 0.8227448 ],\n",
       "       [0.85668106, 0.85295391, 0.85479397, 0.84659822, 0.82825271],\n",
       "       [0.85129307, 0.85661925, 0.85372629, 0.84766796, 0.82935384],\n",
       "       [0.8540948 , 0.88249248, 0.85799703, 0.88125807, 0.86394198],\n",
       "       [0.88577588, 0.88227684, 0.88255396, 0.87590928, 0.85843431],\n",
       "       [0.88189657, 0.87602422, 0.87016871, 0.86200256, 0.84411479],\n",
       "       [0.88362063, 0.88357053, 0.87892376, 0.86606763, 0.84829995],\n",
       "       [0.87047413, 0.86200956, 0.84390347, 0.8344031 , 0.81569511],\n",
       "       [0.83857758, 0.87645542, 0.84966903, 0.87398378, 0.85645156],\n",
       "       [0.88168102, 0.88012075, 0.88105913, 0.86649551, 0.84874037],\n",
       "       [0.87090514, 0.86287196, 0.85949177, 0.84724008, 0.82891342],\n",
       "       [0.85237065, 0.88249248, 0.8601324 , 0.88403941, 0.86680588],\n",
       "       [0.85668106, 0.86589053, 0.86248134, 0.8630723 , 0.84521599],\n",
       "       [0.87176726, 0.8870203 , 0.88191333, 0.87783486, 0.86041721],\n",
       "       [0.88254305, 0.89003888, 0.88298101, 0.86949083, 0.85182511],\n",
       "       [0.875     , 0.86955587, 0.85821051, 0.86521178, 0.84741896],\n",
       "       [0.85775864, 0.85877534, 0.83600253, 0.84552848, 0.82715127],\n",
       "       [0.86745685, 0.88055195, 0.86120008, 0.88403941, 0.86680588],\n",
       "       [0.87780172, 0.88033639, 0.87828313, 0.88446729, 0.86724607],\n",
       "       [0.88900862, 0.88551106, 0.84838778, 0.85237489, 0.83420073],\n",
       "       [0.83512929, 0.83872361, 0.83365367, 0.83975181, 0.82120263],\n",
       "       [0.83189656, 0.82988361, 0.82532568, 0.81108261, 0.79168158],\n",
       "       [0.81896551, 0.82341526, 0.82703399, 0.82199401, 0.80649534],\n",
       "       [0.85129307, 0.85015098, 0.84240872, 0.8292683 , 0.81401255],\n",
       "       [0.83448273, 0.84282023, 0.84561178, 0.84124952, 0.82639405],\n",
       "       [0.84913791, 0.84497632, 0.83557547, 0.83889605, 0.82396218]])"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainX[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "id": "bdaf6a49",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "trainX Shape--  (4132, 30, 5)\n",
      "trainY Shape--  (4132,)\n"
     ]
    }
   ],
   "source": [
    "print(\"trainX Shape-- \",trainX.shape)\n",
    "print(\"trainY Shape-- \",trainY.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "id": "0c78e7db",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "testX Shape--  (1011, 30, 5)\n",
      "testY Shape--  (1011,)\n"
     ]
    }
   ],
   "source": [
    "print(\"testX Shape-- \",testX.shape)\n",
    "print(\"testY Shape-- \",testY.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "id": "cbf9d2df",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "trainX[0]-- \n",
      " [[0.85398707 0.86281807 0.85292546 0.8403402  0.82180889]\n",
      " [0.85533406 0.85473269 0.82623316 0.8122593  0.79289309]\n",
      " [0.82155169 0.84260459 0.81422168 0.80701755 0.78749611]\n",
      " [0.81918098 0.84303579 0.82319031 0.8470261  0.8286929 ]\n",
      " [0.86206895 0.85769729 0.84753366 0.84124952 0.8227448 ]\n",
      " [0.85668106 0.85295391 0.85479397 0.84659822 0.82825271]\n",
      " [0.85129307 0.85661925 0.85372629 0.84766796 0.82935384]\n",
      " [0.8540948  0.88249248 0.85799703 0.88125807 0.86394198]\n",
      " [0.88577588 0.88227684 0.88255396 0.87590928 0.85843431]\n",
      " [0.88189657 0.87602422 0.87016871 0.86200256 0.84411479]\n",
      " [0.88362063 0.88357053 0.87892376 0.86606763 0.84829995]\n",
      " [0.87047413 0.86200956 0.84390347 0.8344031  0.81569511]\n",
      " [0.83857758 0.87645542 0.84966903 0.87398378 0.85645156]\n",
      " [0.88168102 0.88012075 0.88105913 0.86649551 0.84874037]\n",
      " [0.87090514 0.86287196 0.85949177 0.84724008 0.82891342]\n",
      " [0.85237065 0.88249248 0.8601324  0.88403941 0.86680588]\n",
      " [0.85668106 0.86589053 0.86248134 0.8630723  0.84521599]\n",
      " [0.87176726 0.8870203  0.88191333 0.87783486 0.86041721]\n",
      " [0.88254305 0.89003888 0.88298101 0.86949083 0.85182511]\n",
      " [0.875      0.86955587 0.85821051 0.86521178 0.84741896]\n",
      " [0.85775864 0.85877534 0.83600253 0.84552848 0.82715127]\n",
      " [0.86745685 0.88055195 0.86120008 0.88403941 0.86680588]\n",
      " [0.87780172 0.88033639 0.87828313 0.88446729 0.86724607]\n",
      " [0.88900862 0.88551106 0.84838778 0.85237489 0.83420073]\n",
      " [0.83512929 0.83872361 0.83365367 0.83975181 0.82120263]\n",
      " [0.83189656 0.82988361 0.82532568 0.81108261 0.79168158]\n",
      " [0.81896551 0.82341526 0.82703399 0.82199401 0.80649534]\n",
      " [0.85129307 0.85015098 0.84240872 0.8292683  0.81401255]\n",
      " [0.83448273 0.84282023 0.84561178 0.84124952 0.82639405]\n",
      " [0.84913791 0.84497632 0.83557547 0.83889605 0.82396218]]\n",
      "\n",
      "trainY[0]--  0.8297413960482309\n"
     ]
    }
   ],
   "source": [
    "print(\"trainX[0]-- \\n\",trainX[0])\n",
    "print(\"\\ntrainY[0]-- \",trainY[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "id": "a5892e85",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8297413960482309"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainY[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "id": "713712db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4132,)"
      ]
     },
     "execution_count": 191,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainY.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "id": "d165e52b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.wrappers.scikit_learn import KerasRegressor\n",
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "id": "42ffe2bf",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\HP\\AppData\\Local\\Temp\\ipykernel_6216\\1208682764.py:11: DeprecationWarning: KerasRegressor is deprecated, use Sci-Keras (https://github.com/adriangb/scikeras) instead. See https://www.adriangb.com/scikeras/stable/migration.html for help migrating.\n",
      "  grid_model = KerasRegressor(build_fn=build_model,verbose=1,validation_data=(testX,testY))\n"
     ]
    }
   ],
   "source": [
    "def build_model(optimizer):\n",
    "    grid_model = Sequential()\n",
    "    grid_model.add(LSTM(50,return_sequences=True,input_shape=(30,5)))\n",
    "    grid_model.add(LSTM(50))\n",
    "    grid_model.add(Dropout(0.2))\n",
    "    grid_model.add(Dense(1))\n",
    "\n",
    "    grid_model.compile(loss = 'mse',optimizer = optimizer)\n",
    "    return grid_model\n",
    "\n",
    "grid_model = KerasRegressor(build_fn=build_model,verbose=1,validation_data=(testX,testY))\n",
    "# grid_model = Sci-Keras(build_fn=build_model,verbose=1,validation_data=(testX,testY))\n",
    "parameters = {'batch_size' : [16,20],\n",
    "              'epochs' : [8,10],\n",
    "              'optimizer' : ['adam','Adadelta'] }\n",
    "\n",
    "grid_search  = GridSearchCV(estimator = grid_model,\n",
    "                            param_grid = parameters,\n",
    "                            cv = 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "id": "1fc54625",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/8\n",
      "130/130 [==============================] - 3s 10ms/step - loss: 0.0058 - val_loss: 0.0030\n",
      "Epoch 2/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0013 - val_loss: 0.0024\n",
      "Epoch 3/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 9.9709e-04 - val_loss: 0.0016\n",
      "Epoch 4/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 9.9390e-04 - val_loss: 0.0018\n",
      "Epoch 5/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 8.6198e-04 - val_loss: 0.0015\n",
      "Epoch 6/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 8.6017e-04 - val_loss: 0.0019\n",
      "Epoch 7/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 7.9321e-04 - val_loss: 0.0015\n",
      "Epoch 8/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 7.5362e-04 - val_loss: 0.0016\n",
      "130/130 [==============================] - 0s 2ms/step - loss: 0.0103\n",
      "Epoch 1/8\n",
      "130/130 [==============================] - 3s 9ms/step - loss: 0.0107 - val_loss: 0.0016\n",
      "Epoch 2/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0030 - val_loss: 2.9878e-04\n",
      "Epoch 3/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0027 - val_loss: 1.4286e-04\n",
      "Epoch 4/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0027 - val_loss: 4.0023e-04\n",
      "Epoch 5/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 2.5345e-04\n",
      "Epoch 6/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 2.7922e-04\n",
      "Epoch 7/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 1.1207e-04\n",
      "Epoch 8/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 1.2361e-04\n",
      "130/130 [==============================] - 0s 2ms/step - loss: 1.2533e-04\n",
      "Epoch 1/8\n",
      "130/130 [==============================] - 2s 9ms/step - loss: 0.1736 - val_loss: 0.0237\n",
      "Epoch 2/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1593 - val_loss: 0.0208\n",
      "Epoch 3/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1427 - val_loss: 0.0180\n",
      "Epoch 4/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1279 - val_loss: 0.0152\n",
      "Epoch 5/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1101 - val_loss: 0.0126\n",
      "Epoch 6/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0972 - val_loss: 0.0101\n",
      "Epoch 7/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0814 - val_loss: 0.0079\n",
      "Epoch 8/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0680 - val_loss: 0.0060\n",
      "130/130 [==============================] - 0s 2ms/step - loss: 0.1486\n",
      "Epoch 1/8\n",
      "130/130 [==============================] - 3s 11ms/step - loss: 0.2722 - val_loss: 0.0141\n",
      "Epoch 2/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.2536 - val_loss: 0.0125\n",
      "Epoch 3/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.2359 - val_loss: 0.0109\n",
      "Epoch 4/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.2180 - val_loss: 0.0094\n",
      "Epoch 5/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1976 - val_loss: 0.0079\n",
      "Epoch 6/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1809 - val_loss: 0.0065\n",
      "Epoch 7/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1630 - val_loss: 0.0052\n",
      "Epoch 8/8\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1432 - val_loss: 0.0040\n",
      "130/130 [==============================] - 0s 2ms/step - loss: 0.0449\n",
      "Epoch 1/10\n",
      "130/130 [==============================] - 2s 9ms/step - loss: 0.0045 - val_loss: 0.0031\n",
      "Epoch 2/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0011 - val_loss: 0.0027\n",
      "Epoch 3/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0010 - val_loss: 0.0019\n",
      "Epoch 4/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 9.3222e-04 - val_loss: 0.0015\n",
      "Epoch 5/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 8.7267e-04 - val_loss: 0.0022\n",
      "Epoch 6/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 8.3995e-04 - val_loss: 0.0015\n",
      "Epoch 7/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 7.2904e-04 - val_loss: 0.0014\n",
      "Epoch 8/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 7.0710e-04 - val_loss: 0.0015\n",
      "Epoch 9/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 6.7485e-04 - val_loss: 0.0017\n",
      "Epoch 10/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 5.7919e-04 - val_loss: 0.0017\n",
      "130/130 [==============================] - 0s 2ms/step - loss: 0.0057\n",
      "Epoch 1/10\n",
      "130/130 [==============================] - 2s 9ms/step - loss: 0.0134 - val_loss: 0.0013\n",
      "Epoch 2/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0032 - val_loss: 2.3746e-04\n",
      "Epoch 3/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0027 - val_loss: 1.6261e-04\n",
      "Epoch 4/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0029 - val_loss: 1.5929e-04\n",
      "Epoch 5/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0023 - val_loss: 2.1234e-04\n",
      "Epoch 6/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0024 - val_loss: 1.7573e-04\n",
      "Epoch 7/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0021 - val_loss: 1.9841e-04\n",
      "Epoch 8/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0021 - val_loss: 1.9087e-04\n",
      "Epoch 9/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0020 - val_loss: 1.4531e-04\n",
      "Epoch 10/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0019 - val_loss: 1.3395e-04\n",
      "130/130 [==============================] - 0s 2ms/step - loss: 2.2784e-04\n",
      "Epoch 1/10\n",
      "130/130 [==============================] - 3s 9ms/step - loss: 0.0735 - val_loss: 0.0067\n",
      "Epoch 2/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0649 - val_loss: 0.0053\n",
      "Epoch 3/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0558 - val_loss: 0.0041\n",
      "Epoch 4/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0472 - val_loss: 0.0030\n",
      "Epoch 5/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0395 - val_loss: 0.0022\n",
      "Epoch 6/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0319 - val_loss: 0.0016\n",
      "Epoch 7/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0262 - val_loss: 0.0012\n",
      "Epoch 8/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0205 - val_loss: 9.8427e-04\n",
      "Epoch 9/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0164 - val_loss: 0.0010\n",
      "Epoch 10/10\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0122 - val_loss: 0.0012\n",
      "130/130 [==============================] - 0s 2ms/step - loss: 0.0583\n",
      "Epoch 1/10\n",
      "130/130 [==============================] - 2s 9ms/step - loss: 0.1691 - val_loss: 0.0045\n",
      "Epoch 2/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1472 - val_loss: 0.0033\n",
      "Epoch 3/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1273 - val_loss: 0.0022\n",
      "Epoch 4/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.1080 - val_loss: 0.0014\n",
      "Epoch 5/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0883 - val_loss: 8.3537e-04\n",
      "Epoch 6/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0733 - val_loss: 5.9413e-04\n",
      "Epoch 7/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0566 - val_loss: 6.8002e-04\n",
      "Epoch 8/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0445 - val_loss: 0.0011\n",
      "Epoch 9/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0332 - val_loss: 0.0018\n",
      "Epoch 10/10\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0251 - val_loss: 0.0027\n",
      "130/130 [==============================] - 0s 2ms/step - loss: 3.6947e-04\n",
      "Epoch 1/8\n",
      "104/104 [==============================] - 2s 9ms/step - loss: 0.0052 - val_loss: 0.0031\n",
      "Epoch 2/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0011 - val_loss: 0.0023\n",
      "Epoch 3/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 9.6501e-04 - val_loss: 0.0018\n",
      "Epoch 4/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 8.8123e-04 - val_loss: 0.0019\n",
      "Epoch 5/8\n",
      "104/104 [==============================] - 1s 5ms/step - loss: 9.4226e-04 - val_loss: 0.0024\n",
      "Epoch 6/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 8.0763e-04 - val_loss: 0.0016\n",
      "Epoch 7/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 8.2305e-04 - val_loss: 0.0017\n",
      "Epoch 8/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 7.6682e-04 - val_loss: 0.0011\n",
      "104/104 [==============================] - 0s 2ms/step - loss: 0.0100\n",
      "Epoch 1/8\n",
      "104/104 [==============================] - 2s 10ms/step - loss: 0.0058 - val_loss: 2.6033e-04\n",
      "Epoch 2/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0030 - val_loss: 1.7710e-04\n",
      "Epoch 3/8\n",
      "104/104 [==============================] - 1s 5ms/step - loss: 0.0027 - val_loss: 3.2914e-04\n",
      "Epoch 4/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 2.0379e-04\n",
      "Epoch 5/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 2.0214e-04\n",
      "Epoch 6/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 4.0283e-04\n",
      "Epoch 7/8\n",
      "104/104 [==============================] - 1s 5ms/step - loss: 0.0021 - val_loss: 1.5776e-04\n",
      "Epoch 8/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 2.6862e-04\n",
      "104/104 [==============================] - 0s 2ms/step - loss: 3.8381e-04\n",
      "Epoch 1/8\n",
      "104/104 [==============================] - 2s 9ms/step - loss: 0.1500 - val_loss: 0.0184\n",
      "Epoch 2/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1379 - val_loss: 0.0162\n",
      "Epoch 3/8\n",
      "104/104 [==============================] - 1s 5ms/step - loss: 0.1264 - val_loss: 0.0141\n",
      "Epoch 4/8\n",
      "104/104 [==============================] - 1s 5ms/step - loss: 0.1133 - val_loss: 0.0121\n",
      "Epoch 5/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1034 - val_loss: 0.0103\n",
      "Epoch 6/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0926 - val_loss: 0.0086\n",
      "Epoch 7/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0818 - val_loss: 0.0071\n",
      "Epoch 8/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0724 - val_loss: 0.0057\n",
      "104/104 [==============================] - 0s 2ms/step - loss: 0.1862\n",
      "Epoch 1/8\n",
      "104/104 [==============================] - 2s 12ms/step - loss: 0.5532 - val_loss: 0.0288\n",
      "Epoch 2/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.5240 - val_loss: 0.0263\n",
      "Epoch 3/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.4983 - val_loss: 0.0238\n",
      "Epoch 4/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.4659 - val_loss: 0.0214\n",
      "Epoch 5/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.4359 - val_loss: 0.0190\n",
      "Epoch 6/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.4071 - val_loss: 0.0167\n",
      "Epoch 7/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.3762 - val_loss: 0.0145\n",
      "Epoch 8/8\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.3466 - val_loss: 0.0124\n",
      "104/104 [==============================] - 0s 2ms/step - loss: 0.1209\n",
      "Epoch 1/10\n",
      "104/104 [==============================] - 2s 9ms/step - loss: 0.0048 - val_loss: 0.0032\n",
      "Epoch 2/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0011 - val_loss: 0.0026\n",
      "Epoch 3/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0011 - val_loss: 0.0028\n",
      "Epoch 4/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 8.8079e-04 - val_loss: 0.0017\n",
      "Epoch 5/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 8.7229e-04 - val_loss: 0.0010\n",
      "Epoch 6/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 7.9603e-04 - val_loss: 0.0013\n",
      "Epoch 7/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 7.3608e-04 - val_loss: 7.7913e-04\n",
      "Epoch 8/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 8.4439e-04 - val_loss: 9.9676e-04\n",
      "Epoch 9/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 8.1672e-04 - val_loss: 0.0010\n",
      "Epoch 10/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 7.0204e-04 - val_loss: 0.0014\n",
      "104/104 [==============================] - 0s 2ms/step - loss: 0.0070\n",
      "Epoch 1/10\n",
      "104/104 [==============================] - 2s 9ms/step - loss: 0.0120 - val_loss: 3.3284e-04\n",
      "Epoch 2/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0029 - val_loss: 2.4051e-04\n",
      "Epoch 3/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0029 - val_loss: 1.9228e-04\n",
      "Epoch 4/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 1.8492e-04\n",
      "Epoch 5/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 1.4870e-04\n",
      "Epoch 6/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 1.6677e-04\n",
      "Epoch 7/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 1.4544e-04\n",
      "Epoch 8/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 3.2817e-04\n",
      "Epoch 9/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 2.9674e-04\n",
      "Epoch 10/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 1.2191e-04\n",
      "104/104 [==============================] - 0s 2ms/step - loss: 1.6197e-04\n",
      "Epoch 1/10\n",
      "104/104 [==============================] - 2s 10ms/step - loss: 0.2074 - val_loss: 0.0241\n",
      "Epoch 2/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1921 - val_loss: 0.0217\n",
      "Epoch 3/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1803 - val_loss: 0.0194\n",
      "Epoch 4/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1672 - val_loss: 0.0171\n",
      "Epoch 5/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1511 - val_loss: 0.0149\n",
      "Epoch 6/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1379 - val_loss: 0.0128\n",
      "Epoch 7/10\n",
      "104/104 [==============================] - 1s 5ms/step - loss: 0.1250 - val_loss: 0.0108\n",
      "Epoch 8/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1120 - val_loss: 0.0091\n",
      "Epoch 9/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0979 - val_loss: 0.0075\n",
      "Epoch 10/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0869 - val_loss: 0.0060\n",
      "104/104 [==============================] - 0s 2ms/step - loss: 0.2541\n",
      "Epoch 1/10\n",
      "104/104 [==============================] - 2s 9ms/step - loss: 0.4539 - val_loss: 0.0252\n",
      "Epoch 2/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.4256 - val_loss: 0.0224\n",
      "Epoch 3/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.3963 - val_loss: 0.0196\n",
      "Epoch 4/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.3624 - val_loss: 0.0170\n",
      "Epoch 5/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.3340 - val_loss: 0.0145\n",
      "Epoch 6/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.3063 - val_loss: 0.0122\n",
      "Epoch 7/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.2759 - val_loss: 0.0100\n",
      "Epoch 8/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.2475 - val_loss: 0.0080\n",
      "Epoch 9/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.2230 - val_loss: 0.0062\n",
      "Epoch 10/10\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.1952 - val_loss: 0.0047\n",
      "104/104 [==============================] - 0s 2ms/step - loss: 0.0568\n",
      "Epoch 1/10\n",
      "259/259 [==============================] - 3s 6ms/step - loss: 0.0047 - val_loss: 2.6268e-04\n",
      "Epoch 2/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 0.0018 - val_loss: 1.5553e-04\n",
      "Epoch 3/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 0.0016 - val_loss: 1.3181e-04\n",
      "Epoch 4/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 0.0014 - val_loss: 1.8858e-04\n",
      "Epoch 5/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 0.0012 - val_loss: 1.6439e-04\n",
      "Epoch 6/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 0.0011 - val_loss: 1.0532e-04\n",
      "Epoch 7/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 9.8059e-04 - val_loss: 1.3846e-04\n",
      "Epoch 8/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 9.2672e-04 - val_loss: 1.8077e-04\n",
      "Epoch 9/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 7.8376e-04 - val_loss: 1.2011e-04\n",
      "Epoch 10/10\n",
      "259/259 [==============================] - 1s 5ms/step - loss: 7.4760e-04 - val_loss: 8.5734e-05\n"
     ]
    }
   ],
   "source": [
    "grid_search = grid_search.fit(trainX,trainY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "id": "a9e26e10",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'batch_size': 16, 'epochs': 10, 'optimizer': 'adam'}"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_search.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "id": "d6851ffc",
   "metadata": {},
   "outputs": [],
   "source": [
    "my_model=grid_search.best_estimator_.model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "id": "9f0b2e50",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<keras.engine.sequential.Sequential at 0x1c3a7363c70>"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "id": "eeb97d64",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "32/32 [==============================] - 0s 2ms/step\n"
     ]
    }
   ],
   "source": [
    "prediction=my_model.predict(testX)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "id": "8699c0d3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "prediction\n",
      " [[0.37811583]\n",
      " [0.3826092 ]\n",
      " [0.38629696]\n",
      " ...\n",
      " [0.13133943]\n",
      " [0.13483717]\n",
      " [0.13861486]]\n",
      "\n",
      "Prediction Shape- (1011, 1)\n"
     ]
    }
   ],
   "source": [
    "print(\"prediction\\n\", prediction)\n",
    "print(\"\\nPrediction Shape-\",prediction.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "id": "2be6090a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1011, 1)"
      ]
     },
     "execution_count": 200,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "id": "c8c654a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# scaler.inverse_transform(prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "id": "44862c61",
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction_copies_array = np.repeat(prediction,5, axis=-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "id": "1dbd500f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1011, 5)"
      ]
     },
     "execution_count": 203,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction_copies_array.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "id": "3b00bd6e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.37811583, 0.37811583, 0.37811583, 0.37811583, 0.37811583],\n",
       "       [0.3826092 , 0.3826092 , 0.3826092 , 0.3826092 , 0.3826092 ],\n",
       "       [0.38629696, 0.38629696, 0.38629696, 0.38629696, 0.38629696],\n",
       "       ...,\n",
       "       [0.13133943, 0.13133943, 0.13133943, 0.13133943, 0.13133943],\n",
       "       [0.13483717, 0.13483717, 0.13483717, 0.13483717, 0.13483717],\n",
       "       [0.13861486, 0.13861486, 0.13861486, 0.13861486, 0.13861486]],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 204,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction_copies_array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "id": "84f2780a",
   "metadata": {},
   "outputs": [],
   "source": [
    "pred=scaler.inverse_transform(np.reshape(prediction_copies_array,(len(prediction),5)))[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "id": "2c86afce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([186.88135 , 188.48512 , 189.80136 , ...,  98.801155, 100.04957 ,\n",
       "       101.39792 ], dtype=float32)"
      ]
     },
     "execution_count": 206,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "id": "4ec05dff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5055,)"
      ]
     },
     "execution_count": 207,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "original_copies_array = np.repeat(testY,5, axis=-1)\n",
    "\n",
    "original_copies_array.shape\n",
    "\n",
    "original=scaler.inverse_transform(np.reshape(original_copies_array,(len(testY),5)))[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "id": "442e0222",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([186.88135 , 188.48512 , 189.80136 , ...,  98.801155, 100.04957 ,\n",
       "       101.39792 ], dtype=float32)"
      ]
     },
     "execution_count": 208,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "id": "cecfd7bf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pred Values--  [186.88135  188.48512  189.80136  ...  98.801155 100.04957  101.39792 ]\n",
      "\n",
      "Original Values--  [191.692307 193.461533 192.307693 ... 104.550003 105.290001 106.      ]\n"
     ]
    }
   ],
   "source": [
    "print(\"Pred Values-- \" ,pred)\n",
    "print(\"\\nOriginal Values-- \",original)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b1986d23",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "id": "07e37414",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "id": "bfa9b94b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1c3d4b237c0>]"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1c3d4b23af0>]"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, ' Stock Price Prediction')"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Time')"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, ' Stock Price')"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1c3d4b23970>"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(original, color = 'red', label = 'Real  Stock Price')\n",
    "plt.plot(pred, color = 'blue', label = 'Predicted  Stock Price')\n",
    "plt.title(' Stock Price Prediction')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel(' Stock Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "441ddb80",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "id": "3a095e22",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_30_days_past=df.iloc[-30:,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "id": "451dafea",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-08-18</th>\n",
       "      <td>101.080002</td>\n",
       "      <td>103.470001</td>\n",
       "      <td>100.760002</td>\n",
       "      <td>101.410004</td>\n",
       "      <td>101.242561</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-19</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.820000</td>\n",
       "      <td>98.599998</td>\n",
       "      <td>99.419998</td>\n",
       "      <td>99.255844</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-20</th>\n",
       "      <td>99.589996</td>\n",
       "      <td>100.669998</td>\n",
       "      <td>99.099998</td>\n",
       "      <td>100.050003</td>\n",
       "      <td>99.884804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-23</th>\n",
       "      <td>100.599998</td>\n",
       "      <td>101.480003</td>\n",
       "      <td>100.269997</td>\n",
       "      <td>100.970001</td>\n",
       "      <td>100.803284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-24</th>\n",
       "      <td>101.290001</td>\n",
       "      <td>103.510002</td>\n",
       "      <td>101.059998</td>\n",
       "      <td>103.269997</td>\n",
       "      <td>103.099487</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-25</th>\n",
       "      <td>103.360001</td>\n",
       "      <td>105.129997</td>\n",
       "      <td>102.550003</td>\n",
       "      <td>104.699997</td>\n",
       "      <td>104.527122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-26</th>\n",
       "      <td>104.459999</td>\n",
       "      <td>104.620003</td>\n",
       "      <td>102.839996</td>\n",
       "      <td>103.379997</td>\n",
       "      <td>103.209305</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-27</th>\n",
       "      <td>103.900002</td>\n",
       "      <td>106.150002</td>\n",
       "      <td>103.900002</td>\n",
       "      <td>106.089996</td>\n",
       "      <td>105.914825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-30</th>\n",
       "      <td>106.330002</td>\n",
       "      <td>106.459999</td>\n",
       "      <td>104.800003</td>\n",
       "      <td>105.190002</td>\n",
       "      <td>105.016312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-31</th>\n",
       "      <td>104.940002</td>\n",
       "      <td>106.360001</td>\n",
       "      <td>104.459999</td>\n",
       "      <td>105.410004</td>\n",
       "      <td>105.235954</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-01</th>\n",
       "      <td>105.360001</td>\n",
       "      <td>105.470001</td>\n",
       "      <td>103.260002</td>\n",
       "      <td>103.660004</td>\n",
       "      <td>103.488846</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-02</th>\n",
       "      <td>104.000000</td>\n",
       "      <td>106.339996</td>\n",
       "      <td>103.980003</td>\n",
       "      <td>106.260002</td>\n",
       "      <td>106.084557</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-03</th>\n",
       "      <td>106.000000</td>\n",
       "      <td>107.360001</td>\n",
       "      <td>104.080002</td>\n",
       "      <td>104.750000</td>\n",
       "      <td>104.577042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-07</th>\n",
       "      <td>104.500000</td>\n",
       "      <td>104.940002</td>\n",
       "      <td>102.309998</td>\n",
       "      <td>103.290001</td>\n",
       "      <td>103.119453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-08</th>\n",
       "      <td>102.949997</td>\n",
       "      <td>104.730003</td>\n",
       "      <td>100.419998</td>\n",
       "      <td>102.580002</td>\n",
       "      <td>102.410629</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-09</th>\n",
       "      <td>102.360001</td>\n",
       "      <td>104.919998</td>\n",
       "      <td>102.110001</td>\n",
       "      <td>103.290001</td>\n",
       "      <td>103.119453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-10</th>\n",
       "      <td>103.290001</td>\n",
       "      <td>103.949997</td>\n",
       "      <td>101.779999</td>\n",
       "      <td>102.000000</td>\n",
       "      <td>101.831581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-13</th>\n",
       "      <td>102.650002</td>\n",
       "      <td>104.860001</td>\n",
       "      <td>102.019997</td>\n",
       "      <td>104.459999</td>\n",
       "      <td>104.287521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-14</th>\n",
       "      <td>104.540001</td>\n",
       "      <td>104.550003</td>\n",
       "      <td>100.070000</td>\n",
       "      <td>100.379997</td>\n",
       "      <td>100.214256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-15</th>\n",
       "      <td>100.790001</td>\n",
       "      <td>102.470001</td>\n",
       "      <td>100.690002</td>\n",
       "      <td>102.160004</td>\n",
       "      <td>101.991325</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-16</th>\n",
       "      <td>102.389999</td>\n",
       "      <td>102.699997</td>\n",
       "      <td>100.820000</td>\n",
       "      <td>101.339996</td>\n",
       "      <td>101.172668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-17</th>\n",
       "      <td>101.150002</td>\n",
       "      <td>101.860001</td>\n",
       "      <td>100.129997</td>\n",
       "      <td>100.470001</td>\n",
       "      <td>100.304115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-20</th>\n",
       "      <td>98.500000</td>\n",
       "      <td>99.870003</td>\n",
       "      <td>97.269997</td>\n",
       "      <td>99.809998</td>\n",
       "      <td>99.645195</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-21</th>\n",
       "      <td>99.900002</td>\n",
       "      <td>99.989998</td>\n",
       "      <td>96.209999</td>\n",
       "      <td>96.820000</td>\n",
       "      <td>96.660133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-22</th>\n",
       "      <td>97.669998</td>\n",
       "      <td>99.029999</td>\n",
       "      <td>97.660004</td>\n",
       "      <td>98.540001</td>\n",
       "      <td>98.377296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-23</th>\n",
       "      <td>99.529999</td>\n",
       "      <td>104.080002</td>\n",
       "      <td>99.519997</td>\n",
       "      <td>102.959999</td>\n",
       "      <td>102.789993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-24</th>\n",
       "      <td>102.660004</td>\n",
       "      <td>104.199997</td>\n",
       "      <td>102.599998</td>\n",
       "      <td>103.800003</td>\n",
       "      <td>103.709198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-27</th>\n",
       "      <td>104.550003</td>\n",
       "      <td>106.330002</td>\n",
       "      <td>104.389999</td>\n",
       "      <td>105.349998</td>\n",
       "      <td>105.257835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-28</th>\n",
       "      <td>105.290001</td>\n",
       "      <td>106.750000</td>\n",
       "      <td>104.730003</td>\n",
       "      <td>105.730003</td>\n",
       "      <td>105.637512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-29</th>\n",
       "      <td>106.000000</td>\n",
       "      <td>107.000000</td>\n",
       "      <td>105.309998</td>\n",
       "      <td>106.279999</td>\n",
       "      <td>106.187027</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close\n",
       "Date                                                                  \n",
       "2021-08-18  101.080002  103.470001  100.760002  101.410004  101.242561\n",
       "2021-08-19  100.000000  100.820000   98.599998   99.419998   99.255844\n",
       "2021-08-20   99.589996  100.669998   99.099998  100.050003   99.884804\n",
       "2021-08-23  100.599998  101.480003  100.269997  100.970001  100.803284\n",
       "2021-08-24  101.290001  103.510002  101.059998  103.269997  103.099487\n",
       "2021-08-25  103.360001  105.129997  102.550003  104.699997  104.527122\n",
       "2021-08-26  104.459999  104.620003  102.839996  103.379997  103.209305\n",
       "2021-08-27  103.900002  106.150002  103.900002  106.089996  105.914825\n",
       "2021-08-30  106.330002  106.459999  104.800003  105.190002  105.016312\n",
       "2021-08-31  104.940002  106.360001  104.459999  105.410004  105.235954\n",
       "2021-09-01  105.360001  105.470001  103.260002  103.660004  103.488846\n",
       "2021-09-02  104.000000  106.339996  103.980003  106.260002  106.084557\n",
       "2021-09-03  106.000000  107.360001  104.080002  104.750000  104.577042\n",
       "2021-09-07  104.500000  104.940002  102.309998  103.290001  103.119453\n",
       "2021-09-08  102.949997  104.730003  100.419998  102.580002  102.410629\n",
       "2021-09-09  102.360001  104.919998  102.110001  103.290001  103.119453\n",
       "2021-09-10  103.290001  103.949997  101.779999  102.000000  101.831581\n",
       "2021-09-13  102.650002  104.860001  102.019997  104.459999  104.287521\n",
       "2021-09-14  104.540001  104.550003  100.070000  100.379997  100.214256\n",
       "2021-09-15  100.790001  102.470001  100.690002  102.160004  101.991325\n",
       "2021-09-16  102.389999  102.699997  100.820000  101.339996  101.172668\n",
       "2021-09-17  101.150002  101.860001  100.129997  100.470001  100.304115\n",
       "2021-09-20   98.500000   99.870003   97.269997   99.809998   99.645195\n",
       "2021-09-21   99.900002   99.989998   96.209999   96.820000   96.660133\n",
       "2021-09-22   97.669998   99.029999   97.660004   98.540001   98.377296\n",
       "2021-09-23   99.529999  104.080002   99.519997  102.959999  102.789993\n",
       "2021-09-24  102.660004  104.199997  102.599998  103.800003  103.709198\n",
       "2021-09-27  104.550003  106.330002  104.389999  105.349998  105.257835\n",
       "2021-09-28  105.290001  106.750000  104.730003  105.730003  105.637512\n",
       "2021-09-29  106.000000  107.000000  105.309998  106.279999  106.187027"
      ]
     },
     "execution_count": 213,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_30_days_past"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "id": "92497be0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(30, 4)"
      ]
     },
     "execution_count": 214,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_30_days_future=pd.read_csv(\"test.csv\",parse_dates=[\"Date\"],index_col=[0])\n",
    "df_30_days_future.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 215,
   "id": "7004371c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-09-30</th>\n",
       "      <td>107.089996</td>\n",
       "      <td>102.949997</td>\n",
       "      <td>103.029999</td>\n",
       "      <td>102.939865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-01</th>\n",
       "      <td>106.389999</td>\n",
       "      <td>103.669998</td>\n",
       "      <td>105.820000</td>\n",
       "      <td>105.727425</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-04</th>\n",
       "      <td>107.080002</td>\n",
       "      <td>104.599998</td>\n",
       "      <td>104.900002</td>\n",
       "      <td>104.808235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-05</th>\n",
       "      <td>106.000000</td>\n",
       "      <td>103.750000</td>\n",
       "      <td>104.900002</td>\n",
       "      <td>104.808235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-06</th>\n",
       "      <td>104.419998</td>\n",
       "      <td>102.059998</td>\n",
       "      <td>104.330002</td>\n",
       "      <td>104.238731</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-07</th>\n",
       "      <td>106.529999</td>\n",
       "      <td>104.330002</td>\n",
       "      <td>105.510002</td>\n",
       "      <td>105.417702</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-08</th>\n",
       "      <td>106.220001</td>\n",
       "      <td>104.660004</td>\n",
       "      <td>104.720001</td>\n",
       "      <td>104.628387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-11</th>\n",
       "      <td>105.760002</td>\n",
       "      <td>103.970001</td>\n",
       "      <td>104.080002</td>\n",
       "      <td>103.988953</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-12</th>\n",
       "      <td>104.040001</td>\n",
       "      <td>101.559998</td>\n",
       "      <td>102.720001</td>\n",
       "      <td>102.630142</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-13</th>\n",
       "      <td>103.199997</td>\n",
       "      <td>101.180000</td>\n",
       "      <td>102.360001</td>\n",
       "      <td>102.270454</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-14</th>\n",
       "      <td>103.650002</td>\n",
       "      <td>102.370003</td>\n",
       "      <td>102.739998</td>\n",
       "      <td>102.650116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-15</th>\n",
       "      <td>105.900002</td>\n",
       "      <td>103.190002</td>\n",
       "      <td>104.410004</td>\n",
       "      <td>104.318665</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-18</th>\n",
       "      <td>104.570000</td>\n",
       "      <td>103.040001</td>\n",
       "      <td>104.120003</td>\n",
       "      <td>104.028915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-19</th>\n",
       "      <td>104.970001</td>\n",
       "      <td>103.580002</td>\n",
       "      <td>104.730003</td>\n",
       "      <td>104.638382</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-20</th>\n",
       "      <td>106.019997</td>\n",
       "      <td>103.870003</td>\n",
       "      <td>106.000000</td>\n",
       "      <td>105.907272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-21</th>\n",
       "      <td>106.389999</td>\n",
       "      <td>103.010002</td>\n",
       "      <td>103.150002</td>\n",
       "      <td>103.059761</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-22</th>\n",
       "      <td>104.510002</td>\n",
       "      <td>102.550003</td>\n",
       "      <td>104.050003</td>\n",
       "      <td>103.958977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-25</th>\n",
       "      <td>105.989998</td>\n",
       "      <td>103.330002</td>\n",
       "      <td>105.300003</td>\n",
       "      <td>105.207886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-26</th>\n",
       "      <td>110.970001</td>\n",
       "      <td>105.220001</td>\n",
       "      <td>107.440002</td>\n",
       "      <td>107.346008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-27</th>\n",
       "      <td>108.279999</td>\n",
       "      <td>103.690002</td>\n",
       "      <td>103.849998</td>\n",
       "      <td>103.759148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-28</th>\n",
       "      <td>105.379997</td>\n",
       "      <td>103.099998</td>\n",
       "      <td>105.260002</td>\n",
       "      <td>105.167915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-29</th>\n",
       "      <td>105.239998</td>\n",
       "      <td>104.120003</td>\n",
       "      <td>104.870003</td>\n",
       "      <td>104.778259</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-01</th>\n",
       "      <td>106.769997</td>\n",
       "      <td>105.279999</td>\n",
       "      <td>106.230003</td>\n",
       "      <td>106.137070</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-02</th>\n",
       "      <td>107.139999</td>\n",
       "      <td>105.300003</td>\n",
       "      <td>106.690002</td>\n",
       "      <td>106.596664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-03</th>\n",
       "      <td>106.339996</td>\n",
       "      <td>104.820000</td>\n",
       "      <td>105.970001</td>\n",
       "      <td>105.877296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-04</th>\n",
       "      <td>106.400002</td>\n",
       "      <td>104.290001</td>\n",
       "      <td>105.209999</td>\n",
       "      <td>105.117958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-05</th>\n",
       "      <td>109.650002</td>\n",
       "      <td>106.849998</td>\n",
       "      <td>108.739998</td>\n",
       "      <td>108.644867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-08</th>\n",
       "      <td>110.309998</td>\n",
       "      <td>108.320000</td>\n",
       "      <td>108.419998</td>\n",
       "      <td>108.325150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-09</th>\n",
       "      <td>116.169998</td>\n",
       "      <td>110.480003</td>\n",
       "      <td>111.290001</td>\n",
       "      <td>111.192642</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-10</th>\n",
       "      <td>112.680000</td>\n",
       "      <td>108.110001</td>\n",
       "      <td>108.959999</td>\n",
       "      <td>108.864677</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  High         Low       Close   Adj Close\n",
       "Date                                                      \n",
       "2021-09-30  107.089996  102.949997  103.029999  102.939865\n",
       "2021-10-01  106.389999  103.669998  105.820000  105.727425\n",
       "2021-10-04  107.080002  104.599998  104.900002  104.808235\n",
       "2021-10-05  106.000000  103.750000  104.900002  104.808235\n",
       "2021-10-06  104.419998  102.059998  104.330002  104.238731\n",
       "2021-10-07  106.529999  104.330002  105.510002  105.417702\n",
       "2021-10-08  106.220001  104.660004  104.720001  104.628387\n",
       "2021-10-11  105.760002  103.970001  104.080002  103.988953\n",
       "2021-10-12  104.040001  101.559998  102.720001  102.630142\n",
       "2021-10-13  103.199997  101.180000  102.360001  102.270454\n",
       "2021-10-14  103.650002  102.370003  102.739998  102.650116\n",
       "2021-10-15  105.900002  103.190002  104.410004  104.318665\n",
       "2021-10-18  104.570000  103.040001  104.120003  104.028915\n",
       "2021-10-19  104.970001  103.580002  104.730003  104.638382\n",
       "2021-10-20  106.019997  103.870003  106.000000  105.907272\n",
       "2021-10-21  106.389999  103.010002  103.150002  103.059761\n",
       "2021-10-22  104.510002  102.550003  104.050003  103.958977\n",
       "2021-10-25  105.989998  103.330002  105.300003  105.207886\n",
       "2021-10-26  110.970001  105.220001  107.440002  107.346008\n",
       "2021-10-27  108.279999  103.690002  103.849998  103.759148\n",
       "2021-10-28  105.379997  103.099998  105.260002  105.167915\n",
       "2021-10-29  105.239998  104.120003  104.870003  104.778259\n",
       "2021-11-01  106.769997  105.279999  106.230003  106.137070\n",
       "2021-11-02  107.139999  105.300003  106.690002  106.596664\n",
       "2021-11-03  106.339996  104.820000  105.970001  105.877296\n",
       "2021-11-04  106.400002  104.290001  105.209999  105.117958\n",
       "2021-11-05  109.650002  106.849998  108.739998  108.644867\n",
       "2021-11-08  110.309998  108.320000  108.419998  108.325150\n",
       "2021-11-09  116.169998  110.480003  111.290001  111.192642\n",
       "2021-11-10  112.680000  108.110001  108.959999  108.864677"
      ]
     },
     "execution_count": 215,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_30_days_future"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "id": "20277ef8",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_30_days_future[\"Open\"]=0\n",
    "df_30_days_future=df_30_days_future[[\"Open\",\"High\",\"Low\",\"Close\",\"Adj Close\"]]\n",
    "old_scaled_array=scaler.transform(df_30_days_past)\n",
    "new_scaled_array=scaler.transform(df_30_days_future)\n",
    "new_scaled_df=pd.DataFrame(new_scaled_array)\n",
    "new_scaled_df.iloc[:,0]=np.nan\n",
    "full_df=pd.concat([pd.DataFrame(old_scaled_array),new_scaled_df]).reset_index().drop([\"index\"],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "id": "0dcb1ee5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60, 5)"
      ]
     },
     "execution_count": 217,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 218,
   "id": "88cfa224",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.143640</td>\n",
       "      <td>0.164162</td>\n",
       "      <td>0.150135</td>\n",
       "      <td>0.349458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.152749</td>\n",
       "      <td>0.171268</td>\n",
       "      <td>0.159953</td>\n",
       "      <td>0.367565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.154599</td>\n",
       "      <td>0.175349</td>\n",
       "      <td>0.159063</td>\n",
       "      <td>0.365924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.171024</td>\n",
       "      <td>0.181345</td>\n",
       "      <td>0.167045</td>\n",
       "      <td>0.380645</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.161242</td>\n",
       "      <td>0.174766</td>\n",
       "      <td>0.160565</td>\n",
       "      <td>0.368694</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     0         1         2         3         4\n",
       "55 NaN  0.143640  0.164162  0.150135  0.349458\n",
       "56 NaN  0.152749  0.171268  0.159953  0.367565\n",
       "57 NaN  0.154599  0.175349  0.159063  0.365924\n",
       "58 NaN  0.171024  0.181345  0.167045  0.380645\n",
       "59 NaN  0.161242  0.174766  0.160565  0.368694"
      ]
     },
     "execution_count": 218,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_df.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "id": "e8cc462a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60, 5)"
      ]
     },
     "execution_count": 219,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "id": "48bf070f",
   "metadata": {},
   "outputs": [],
   "source": [
    "full_df_scaled_array=full_df.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "id": "91fdcf82",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60, 5)"
      ]
     },
     "execution_count": 221,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_df_scaled_array.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "id": "547622aa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 13ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 14ms/step\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "1/1 [==============================] - 0s 13ms/step\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 13ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 13ms/step\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "1/1 [==============================] - 0s 11ms/step\n"
     ]
    }
   ],
   "source": [
    "all_data=[]\n",
    "time_step=30\n",
    "for i in range(time_step,len(full_df_scaled_array)):\n",
    "    data_x=[]\n",
    "    data_x.append(full_df_scaled_array[i-time_step:i,0:full_df_scaled_array.shape[1]])\n",
    "    data_x=np.array(data_x)\n",
    "    prediction=my_model.predict(data_x)\n",
    "    all_data.append(prediction)\n",
    "    full_df.iloc[i,0]=prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 223,
   "id": "05929d50",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[array([[0.14215149]], dtype=float32),\n",
       " array([[0.14373505]], dtype=float32),\n",
       " array([[0.14481945]], dtype=float32),\n",
       " array([[0.14548591]], dtype=float32),\n",
       " array([[0.14562812]], dtype=float32),\n",
       " array([[0.1449841]], dtype=float32),\n",
       " array([[0.14479001]], dtype=float32),\n",
       " array([[0.1446363]], dtype=float32),\n",
       " array([[0.14425649]], dtype=float32),\n",
       " array([[0.14307894]], dtype=float32),\n",
       " array([[0.14150001]], dtype=float32),\n",
       " array([[0.14022627]], dtype=float32),\n",
       " array([[0.13995075]], dtype=float32),\n",
       " array([[0.13991667]], dtype=float32),\n",
       " array([[0.14022255]], dtype=float32),\n",
       " array([[0.14103597]], dtype=float32),\n",
       " array([[0.14132369]], dtype=float32),\n",
       " array([[0.1412825]], dtype=float32),\n",
       " array([[0.14160165]], dtype=float32),\n",
       " array([[0.14325047]], dtype=float32),\n",
       " array([[0.14403768]], dtype=float32),\n",
       " array([[0.14424734]], dtype=float32),\n",
       " array([[0.14416912]], dtype=float32),\n",
       " array([[0.14454773]], dtype=float32),\n",
       " array([[0.14519072]], dtype=float32),\n",
       " array([[0.14554644]], dtype=float32),\n",
       " array([[0.14551267]], dtype=float32),\n",
       " array([[0.14670171]], dtype=float32),\n",
       " array([[0.1484177]], dtype=float32),\n",
       " array([[0.15166335]], dtype=float32)]"
      ]
     },
     "execution_count": 223,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "id": "379cf40a",
   "metadata": {},
   "outputs": [],
   "source": [
    "new_array=np.array(all_data)\n",
    "new_array=new_array.reshape(-1,1)\n",
    "prediction_copies_array = np.repeat(new_array,5, axis=-1)\n",
    "y_pred_future_30_days = scaler.inverse_transform(np.reshape(prediction_copies_array,(len(new_array),5)))[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "id": "4ab9307c",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([102.66022 , 103.22543 , 103.61248 , 103.85036 , 103.901115,\n",
       "       103.67125 , 103.60197 , 103.54711 , 103.411545, 102.99125 ,\n",
       "       102.42769 , 101.97307 , 101.87473 , 101.862564, 101.97174 ,\n",
       "       102.26207 , 102.36476 , 102.35006 , 102.463974, 103.052475,\n",
       "       103.33344 , 103.40828 , 103.38036 , 103.515495, 103.744995,\n",
       "       103.87196 , 103.85991 , 104.2843  , 104.896774, 106.05522 ],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 225,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred_future_30_days"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "265bfef0",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "id": "eed9c5c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.models import Model\n",
    "from tensorflow.keras.models import load_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "id": "0ede34e7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# mymodel.save('Model_future_value.h5')\n",
    "# print('Model Saved!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "id": "4f12ddc7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-4 {color: black;background-color: white;}#sk-container-id-4 pre{padding: 0;}#sk-container-id-4 div.sk-toggleable {background-color: white;}#sk-container-id-4 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-4 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-4 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-4 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-4 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-4 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-4 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-4 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-4 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-4 div.sk-item {position: relative;z-index: 1;}#sk-container-id-4 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-4 div.sk-item::before, #sk-container-id-4 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-4 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-4 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-4 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-4 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-4 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-4 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-4 div.sk-label-container {text-align: center;}#sk-container-id-4 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-4 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MinMaxScaler()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">MinMaxScaler</label><div class=\"sk-toggleable__content\"><pre>MinMaxScaler()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "MinMaxScaler()"
      ]
     },
     "execution_count": 228,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "id": "13f766d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "scalerfile = 'scaler_model_future_value.pkl'\n",
    "pickle.dump(scaler, open(scalerfile, 'wb'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dcbe5698",
   "metadata": {},
   "source": [
    "# END!!!!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a7232b27-d0a3-49b6-88a5-72a7777a1347",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
